home *** CD-ROM | disk | FTP | other *** search
- static char rcsid[] = "$Id: tokc.c,v 1.2 1992/12/28 00:41:32 mike Exp $";
-
- /* $Log: tokc.c,v $
- * Revision 1.2 1992/12/28 00:41:32 mike
- * - `Eto_keycode' returns 0 in case of an invalid key prefix.
- * - `Eto_keycode' recognizes the `A-' prefix.
- *
- * Revision 1.1 1992/09/14 13:02:14 mike
- * Initial revision
- *
- */
-
- /* tokc.c : Convert a key string to KeyCode
- * For example:
- * "A" => A
- * "^A" => C-A
- * "C-A" => C-A
- * Input:
- * key_text : pointer to text to convert.
- * prefixable :
- * C Durland
- */
-
- /* Copyright 1990, 1991 Craig Durland
- * Distributed under the terms of the GNU General Public License.
- * Distributed "as is", without warranties of any kind, but comments,
- * suggestions and bug reports are welcome.
- */
-
- #include <char.h>
- #include <const.h>
- #include "ed.h"
-
- extern KeyCode Eprefixes[];
-
- KeyCode Eto_keycode(pkeys,key_text,prefixable)
- PKey *pkeys; unsigned char *key_text;
- {
- register KeyCode keycode = 0;
- register unsigned char c;
- register int j;
-
- for (; c = *key_text; key_text++)
- {
- if (key_text[1] == '-') /* maybe its something like "C-A" */
- {
- switch (c)
- {
- #ifdef atarist
- default: return 0; /* Wrong prefix */
- #else
- default: goto next; /* must be just a dash */
- #endif
- case 'C' : keycode |= CTRL; break;
- case 'F' : keycode |= SOFKEY; break;
- case 'M' : keycode |= META; break;
- case 'S' : keycode |= SHIFT; break;
- #ifdef atarist
- case 'A' : keycode |= PFIX2; break;
- #endif
- }
- key_text++;
- continue;
- }
- next:
- if (iscntrl(c)) keycode |= CTRL | (c ^ 0x40);
- else
- if ((keycode & (CTRL | META | PFIX1 | PFIX2 | PFIX3)) &&
- (keycode & SOFKEY) == 0) keycode |= TOUPPER(c);
- else keycode |= c;
- if (prefixable)
- {
- for (j = PKEYS; j--; ) /* check for prefix keys */
- if (keycode == pkeys[j]) { keycode = Eprefixes[j]; break; }
- prefixable = FALSE;
- }
- }
- return keycode;
- }
-